package java_thinking.unit_13._13_5;

import java.util.Formatter;

/**
 * @Description : 控制空格与对齐抽象语法
 *                %[argument_index$][flags][width][.precision]conversion
 *                width:控制一个域的最小尺寸，通过必要时添加空格，来确保一个域至少达到某个长度，默认
 *                      数据右对齐，可以用"-"改变对齐方向
 *                precision:用来指明最大尺寸。
 *                用于浮点数：表示小数部分要显示出来的位数，默认是6位，
 *                  如果小数位数过多则舍入，太少则尾部补零；
 *                无法用于整数；
 *     2.1 格式
 *
 * %[argument_index$][flags][width][.precision]conversion
 *
 * 2.2 格式说明
 *
 * （1）argument_index$：指定对应的内容参数位置，默认按照顺序依次对应。
 *
 * （2）flags：格式控制。
 *
 * （3）width：区域宽度。
 *
 * （4）.precision：对于浮点型数据，表示显示的小数位数；对于字符串数据，表示显示的字符数量。
 *
 * （5）conversion：类型转换字符。
 *
 *                <类型转换字符>
 *      d   整数型(十进制)    e   浮点数(科学计数)
 *      c   Unicode字符       x   整数(十六进制)
 *      b   Boolean值         h   散列码(十六进制)
 *      s   String            %   字符“%”
 *      f   浮点数(十六进制)
 *
 * @author: cww
 * @DateTime: 2019-03-24 21:25
 */

public class Receipt {
    private double total = 0;
    private Formatter f = new Formatter(System.out);
    public void printTitle() {
        f.format("%-15s %5s %10s\n","Item","Qty","Price");
        f.format("%-15s %5s %10s\n","----","---","-----");
    }
    public void print(String name,int qty,double price){
        //%-15.15s表示左对齐，最大15字符不足空格补齐，截取15个字符
        f.format("%-15.15s %5d %10.2f\n",name,qty,price);
        total +=price;
    }
    public void printTotal() {
        f.format("%-15s %5s %10.2f\n","Tax","",total*0.06);
        f.format("%-15s %5s %10s\n","","","-----");
        f.format("%-15s %5s %10.2f\n","Total","",total * 1.06);
    }

    public static void main(String[] args) {
        Receipt receipt = new Receipt();
        receipt.printTitle();
        receipt.print("Jack's Magic Beans",44444,4.25);
        receipt.print("Jack's Peas",3,5.1);
        receipt.print("Three Bears Porridge",1,14.29);
        receipt.printTotal();
    }
}
